#include<iostream>
#include<unistd.h>
//#include<thread>
#include<pthread.h>
#include<string>

using namespace std;

int main()
{
    cerr<<"asdasd"<<endl;
    return 0;
}

// class TData{

// public:
//     TData(const string &name , pthread_mutex_t *mutex)
//     :_name(name)
//     ,_mutex(mutex)
//     {

//     }
//     ~TData(){}

// public:
//     string _name;
//     pthread_mutex_t *_mutex;

// };

// int tickets = 1000;

// void *threadrun(void *argv)
// {
//     TData *td = static_cast<TData*>(argv);
//     while(1)
//     {
//         pthread_mutex_lock(td->_mutex);
//         if(tickets > 0)
//         {
//             usleep(1000);
//             cout<<td->_name<<" : get a ticket , tickets :"<<tickets--<<endl;
//             pthread_mutex_unlock(td->_mutex);
//         }
//         else
//         {
//             pthread_mutex_unlock(td->_mutex);
//             break;
//         }

//         usleep(1000);

//     }
//     delete td;
//     return nullptr;
// }


// int main()
// {
//     pthread_t t[4];
//     pthread_mutex_t mutex;
//     pthread_mutex_init(&mutex,nullptr);

//     int n = sizeof(t)/sizeof(t[0]);
//     //cout<<n<<endl;
//     for(int i = 0 ;i<n;i++)
//     {
//         char name[64];
//         snprintf(name,64,"thread : %d",i+1);
//         TData *td = new TData(name,&mutex);
//         pthread_create(t+i,nullptr,threadrun,td);
//     }

//     for(int i = 0 ;i<n;i++)
//     {
//         pthread_join(t[i],nullptr);
//     }
    
//     pthread_mutex_destroy(&mutex);


//     return 0;
// }




//int tickets = 1000; // 加锁保证共享资源的安全
// pthread_mutex_t mutex; // 后面说

// void *threadRoutine(void *name)
// {
//     string tname = static_cast<const char*>(name);

//     while(true)
//     {
//        pthread_mutex_lock(&mutex); // 所有线程都要遵守这个规则
//         if(tickets > 0) // tickets == 1; a, b, c,d
//         {
//             //a,b,c,d
//             usleep(2000); // 模拟抢票花费的时间
//             cout << tname << " get a ticket: " << tickets-- << endl;
//             pthread_mutex_unlock(&mutex);
//         }
//         else
//         {
//             pthread_mutex_unlock(&mutex);
//             break;
//         }

//         // 后面还有动作
//         usleep(1000); //充当抢完一张票，后续动作
//     }

//     return nullptr;
// }

// int main()
// {
//     pthread_mutex_init(&mutex, nullptr);

//     pthread_t t[4];
//     int n = sizeof(t)/sizeof(t[0]);
//     for(int i = 0; i < n; i++)
//     {
//         char *data = new char[64];
//         snprintf(data, 64, "thread-%d", i+1);
//         pthread_create(t+i, nullptr, threadRoutine, data);
//     }

//     for(int i = 0; i < n; i++)
//     {
//         pthread_join(t[i], nullptr);
//     }

//     pthread_mutex_destroy(&mutex);
//     return 0;
// }


// void th1run()
// {
//     while(1)
//     {

//         cout<<"th1run"<<endl;
//         sleep(3);
//     }
    
// }

// void th2run()
// {
//     while(1)
//     {
//         sleep(1);
//         cout<<"th2run"<<endl;
//         sleep(2);
//     }
// }

// void th3run()
// {
//     while(1)
//     {
//         sleep(2);

//         cout<<"th3run"<<endl;
//         sleep(1);
//     }
// }

// int main()
// {
//     thread th1(th1run);
//     thread th2(th2run);
//     thread th3(th3run);

//     th1.join();
//     th2.join();
//     th3.join();


//     cout<<"mainrun"<<endl;

//     return 0;
// }